package com.mutual.assistance.user.service;


import com.mutual.assistance.user.model.dto.RoleDTO;
import com.mutual.assistance.user.model.vo.AddPermissionVO;
import com.mutual.assistance.user.model.vo.AddPermissionsVO;
import com.mutual.assistance.user.model.vo.AddRoleVO;
import com.mutual.assistance.user.model.vo.UpdateRoleVO;

import java.util.List;

/**
 * @author chenyuxin
 * @version 1.0
 * @description 权限角色相关服务
 * @date 2023/4/19 13:11
 */
public interface AuthorityRoleService {

    /**
     * @param addRoleVO 上传的角色与菜单参数
     * @description 添加一个角色并且为该角色赋予权限
     * @author chenyuxin
     * @date 2023/4/19 21:24
     */
    void addRoleAndMenu(AddRoleVO addRoleVO);

    /**
     * @param addPermissionVO 上传的角色id与菜单id
     * @description 为角色添加一条非菜单权限
     * @author chenyuxin
     * @date 2023/4/19 22:35
     */
    void addOneMenuForRole(AddPermissionVO addPermissionVO);

    /**
     * @param addPermissionVO 上传的角色id与菜单id
     * @description 为角色添加一条菜单权限
     * @author chenyuxin
     * @date 2023/4/19 22:46
     */
    void addMenuForRole(AddPermissionVO addPermissionVO);

    /**
     * @param addPermissionsVO 上传的角色id与权限集合
     * @description 为角色添加多条权限，包括菜单与非菜单权限
     * @author chenyuxin
     * @date 2023/4/19 22:46
     */
    void addMenusForRole(AddPermissionsVO addPermissionsVO);

    /**
     * @param roleId 角色id
     * @description 删除角色以及角色对应的权限
     * @author chenyuxin
     * @date 2023/4/21 13:30
     */
    void deleteRoleAndMenus(String roleId);


    /**
     * @param roleIds 角色id集合
     * @description 删除多条角色以及角色对应的权限
     * @author chenyuxin
     * @date 2023/4/21 13:30
     */
    void deleteRolesAndMenus(List<String> roleIds);

    /**
     * @param updateRoleVO 更新角色的参数
     * @description 更新角色相关信息
     * @author chenyuxin
     * @date 2023/4/21 14:22
     */
    void updateRoleAndPermission(UpdateRoleVO updateRoleVO);


    /**
     * @param roleId 角色id
     * @return 角色相关信息与权限
     * @description 获取角色相关信息与权限
     * @author chenyuxin
     * @date 2023/4/21 14:35
     */
    RoleDTO getRole(String roleId);

    /**
     * @return 角色相关信息与权限
     * @description 获取所有的角色与相关权限
     * @author chenyuxin
     * @date 2023/4/21 15:02
     */
    List<RoleDTO> getAllRole();
}
